
#if !defined(COURSE_H_)
#define COURSE_H_


#include <string>
using namespace std;

class Course
{
private:
    // 为了支持自动生成不同的ID，我们定义一个int类型的静态成员变量，每次创建新的对象都自动加一
    static int currentId;


protected:
    int id;//课程ID

    string name;//课程名称
    

public:
    
    // 无参数构造函数
    Course();

    // 课程类构造函数：根据课程名称创建课程对象
    Course(const string& cName);

    // 课程类拷贝构造函数
    Course(const Course& course);

    // 打印课程信息
    virtual void PrintInfo() const;

    // 返回课程名称
    inline string GetName() const { return name; };

    // 设置课程名称
    inline void SetName(const string& newName) { name = newName; };

    // 返回课程ID
    inline const int GetId() const { return id; };

    // 操作符<<重载函数，当cout<<输出课程信息时使用
    friend ostream& operator <<(ostream& out, const Course& course);

    // 友元函数：读取输入创建新的课程
    friend void read(istream &inputStream, Course &course);

    virtual ~Course(){};
};


class ProjectCourse: public Course {
public:
    // 设置标签
    inline void SetTag(const string& newTag) { tag = newTag; };

    // 返回标签
    inline string GetTag() const { return tag; };

    // 打印课程信息
    virtual void PrintInfo() const override;

    virtual ~ProjectCourse(){};
private:
    string tag;
};


class EvaluationCourse: public Course 
{
private:
    int limTime;
public:
    // 设置标签
    inline void SetLimTime(int newLimTime) {  limTime=newLimTime; };

    // 返回标签
    inline int GetLimTime() const { return limTime;};

    // 打印课程信息s
    virtual void PrintInfo() const override;

    virtual ~EvaluationCourse(){};
};




#endif // COURSE_H_